package com.example.administrator.activity.music;

import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import com.example.administrator.activity.R;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class MusicPlayActivity extends AppCompatActivity implements View.OnClickListener {
    TextView title, tv_lrc;
    ImageButton play, pause, stop;
    SeekBar seekBar;
    TextView progress, total;
    private Intent intent;
    String Mp3Name, sdPath;
    //    定义三个变量，表示目前处于的状态
//    is_play为false，表示目前不是播放状态
    boolean is_play = false, is_pause = false, is_stop = false;

//    MediaPlayer mediaPlayer = new MediaPlayer();

    /**
     * 1.获取Intent传递的参数
     * 2.修改TextView内容：MP3文件名
     * 3.歌词内容的显示
     * 4.音乐的播放，暂停，继续，停止功能
     * 5.进度条的时间的显示
     * 6.进度条拖动事件
     *
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music_play);
//        关联布局文件中的控件
        init();
        intent = this.getIntent();
        Mp3Name = intent.getStringExtra("Mp3Name");
        sdPath = intent.getStringExtra("sdPath");
        title.setText(Mp3Name);
//        歌词内容的显示
        lrc();
//        按钮绑定事件
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        stop.setOnClickListener(this);
    }

    private void lrc() {
        /**
         * 1）获取歌词文件的路径(SD路径，mp3Name)
         * sd路径+音乐文件名（去掉扩展名）+歌词文件的扩展名（.lrc）
         * 2）通过IO流的方式读取文件
         * 3）文件内容展示在TextView，加滚动条
         */
        String lrc = sdPath + "/" + Mp3Name.substring(0, Mp3Name.length() - 4) + ".lrc";
        FileInputStream in;
        BufferedReader br;
        try {
            in = new FileInputStream(new File(lrc));
//            字符缓冲流
            br = new BufferedReader(new InputStreamReader(in));
//             一次读一行文本
            /**
             * line 保存一行内容
             * s 保存所有内容
             */
            String line, s = "";
            while ((line = br.readLine()) != null) {
                s = s + line + "\n";
            }
            tv_lrc.setText(s);
            /**
             * TextView加滚动条
             * 1）布局文件 android:scrollbasrs="vertical"
             * 2）代码 加一句
             */
            tv_lrc.setMovementMethod(ScrollingMovementMethod.getInstance());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
    }

    private void init() {
        title = findViewById(R.id.music_tv_title);
        tv_lrc = findViewById(R.id.music_tv_lyric);
        progress = findViewById(R.id.music_tv_progress);
        total = findViewById(R.id.music_tv_total);
        play = findViewById(R.id.music_btn_play);
        pause = findViewById(R.id.music_btn_pause);
        stop = findViewById(R.id.music_btn_stop);
        seekBar = findViewById(R.id.music_seekbar);
    }

    /**
     * 实现播放、暂停等按钮的点击事件
     *
     * @param v
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.music_btn_play:
//播放按钮 若目前不在播放状态，则执行播放功能
                if (!is_play) {
                    playMusic();

                }

                break;
            case R.id.music_btn_pause:
                /***
                 * 点击暂停/继续按钮
                 * 若目前在播放状态，不在暂停状态，则执行暂停功能
                 * 若目前不在播放状态，在暂停状态，不在停止状态，则执行继续功能
                 */
                if (is_play && !is_pause && !is_stop) {
                    pauseMusic();
                } else if (!is_play && !is_stop & is_pause) {
                    conutineMusic();
                }
                break;
            case R.id.music_btn_stop:
                /**
                 * 点击停止按钮
                 * 若目前在播放状态，不在停止好状态，则执行停止功能
                 */
                if (is_play && !is_stop) {
                    stopMusic();
                }
                break;
            default:
                break;
        }
    }

    private void stopMusic() {
//        mediaPlayer.stop();
        is_play = false;
        is_pause = false;
        is_stop = true;
        intent = new Intent(this, MusicService.class);
        intent.putExtra("state", 4);
        startService(intent);
    }

    private void conutineMusic() {

        //继续功能
//        mediaPlayer.start();

        is_pause = false;
        is_stop = false;
        is_play = true;
        intent = new Intent(this, MusicService.class);
        intent.putExtra("state", 3);
        startService(intent);
    }

    private void pauseMusic() {
//        mediaPlayer.pause();
        is_play = false;
        is_pause = true;
        is_stop = false;
        intent = new Intent(this, MusicService.class);
        intent.putExtra("state", 2);
        startService(intent);

    }

    private void playMusic() {
        /**
         * 播放功能
         * 1）重置
         * 2）设置播放路径
         * 3）准备
         * 4）播放
         * 修改一下播放目前的播放状态
         */
        try {
//            mediaPlayer.reset();
//            mediaPlayer.setDataSource(sdPath + "/" + Mp3Name);
//            mediaPlayer.prepare();
//            mediaPlayer.start();
            is_play = true;
            is_pause = false;
            is_stop = false;
            /**
             * 开启服务，去完成音乐播放功能
             * 同时传递参数
             */
            intent = new Intent(this, MusicService.class);
            /**
             * 1.代表播放状态，歌曲路径
             */
            intent.putExtra("state", 1);
            intent.putExtra("path", sdPath + "/" + Mp3Name);
            startService(intent);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 每次进入Activity，先关闭歌曲
     * 解决不了问题，每次进入之后mediaPaly都是不同的
     */
//    @Override
//    protected void onResume() {
//        super.onResume();
//        mediaPlayer.stop();
//    }
//    @Override
//    protected void onPause() {
//        super.onPause();
//        if (mediaPlayer != null) {
//            mediaPlayer.stop();
//            mediaPlayer = null;
//        }


}
